package com.ruoyi.student.service;

import com.ruoyi.student.domain.SchoolDegreeInfo;
import com.ruoyi.student.domain.StudentBaseInfo;
import com.ruoyi.student.domain.vo.*;

import java.util.List;

public interface IStudentService {


    /**
     * 获取基础学生信息列表
     *
     * @param vo
     * @return
     */
    public List<StudentListVo> selectStudentList(StudentListSearchVo vo);


    /**
     * 查询学生基础信息导出列表
     *
     * @param vo
     * @return
     */
    public List<StudentExportListVo> selectStudentExportList(StudentListSearchVo vo);


    /**
     * 获取学生推荐表信息列表
     *
     * @param vo
     * @return
     */
    public List<StudentRecommendListVo> selectStudentRecommendList(StudentListSearchVo vo);


    /**
     * 获取学生推荐表填写情况列表
     *
     * @param vo
     * @return
     */
    public List<StudentRecommendFillStateListVo> selectStudentRecommendFillStateList(StudentListSearchVo vo);


    /**
     * 获取年级、系别、专业聚合
     *
     * @return
     */
    public List<SchoolDegreeInfo> selectAggrSchoolDegreeInfoList();


    /**
     * 批量删除学生基础信息
     *
     * @param ids 需要删除的学生基础信息主键集合
     * @return 结果
     */
    public int deleteStudentByIds(Long[] ids);

    /**
     * 删除学生基础信息信息
     *
     * @param id 学生基础信息主键
     * @return 结果
     */
    public int deleteStudentById(Long id);


    /**
     * 添加单个学生
     *
     * @param vo
     * @return
     */
    public int addStudent(StudentAddVo vo) throws Exception;


    /**
     * 添加单个学生
     *
     * @param vo
     * @return
     */
    public int addStudent(StudentBaseInfoTemplateVo vo) throws Exception;


    /**
     * 编辑单个学生
     *
     * @param vo
     * @return
     */
    public int editStudent(StudentEditVo vo) throws Exception;


    /**
     * 编辑单个学生
     *
     * @param vo
     * @return
     */
    public int editStudentByImport(String code, StudentBaseInfoTemplateVo vo);


    /**
     * 编辑学生推荐表基础信息
     *
     * @return
     */
    public int editStudentRecommendBaseInfo(EditStudentBaseInfoVo vo);


    /**
     * 编辑学生推荐表推进信息
     *
     * @return
     */
    public int editStudentRecommendRecommendInfo(EditStudentRecommendInfoVo vo);


    /**
     * 查询学生推荐表确认信息
     *
     * @param code
     * @return
     */
    public SelectStudentRecommendCheckInfoVo selectStudentRecommendCheckInfo(String code);


    /**
     * 确认学生推荐表的信息
     *
     * @param code
     * @return
     */
    public int confirmInfo(String code);


    /**
     * 根据毕业年份获取毕业生数
     *
     * @param year
     * @return
     */
    public Long selectGraduationStudentCount(String year);


    /**
     * 查询学生推荐表信息列表
     *
     * @param vo
     * @return
     */
    public List<SelectStudentRecommendInfoVo> selectStudentRecommendInfoList(StudentRecommendInfoListSearchVo vo);


    /**
     * 查询学生核对单列表
     *
     * @param vo
     * @return
     */
    public List<SelectCheckTableListVo> selectCheckTableList(SelectCheckTableSearchVo vo);


    /**
     * 设定学生带兵方案
     *
     * @param vo
     * @return
     */
    public int setStudentLead(SetStudentLeadVo vo);
}
